package com.elitel.frame.business.service;

import com.elitel.frame.main.entity.CfgDb;
import com.elitel.frame.main.entity.vo.KeyValueModelVo;

import java.util.List;
import java.util.Map;

/**
 * @author gyf
 * @Description 数据库表、字段元数据服务接口
 * @data 2017-07-31
 */
public interface DataBaseMetadataService {

    /**
     * 查询数据库所有表信息
     *
     * @return List<Map < 表名, 注释>>
     * @author gyf
     */
    List<Map<String, String>> getAllTableByDataSource(CfgDb cfgdb);

    /**
     * 通过表名称查询该表的主键
     *
     * @return 主键
     * @author gyf
     */
    String getPkName(CfgDb cfgdb, String tableName);

    /**
     * 通过表名称查询该表所有列名
     *
     * @return List<KeyValueModelVo>
     * @author gyf
     */
    List<KeyValueModelVo> getAllFieldByTableName(CfgDb cfgdb, String tableName);

    /**
     * 执行Sql
     *
     * @return ListList<Map < String, Object>>
     * @author gyf
     */
    List<Map<String, Object>> getSqlResult(CfgDb cfgdb, String strsql);

    /**
     * @return 连接结果(boolean)
     * @Description 测试连接是否成功
     * @author gyf
     */
    boolean testDataSource(CfgDb cfgdb);

    Map<String, String> getPkNameMap(CfgDb cfgdb, List<String> tableNameList);

    Map<String, List<KeyValueModelVo>> getAllFieldMap(CfgDb cfgdb, List<String> tableNameList);

    List<Map<String, Object>> getDBTableRecordCount(CfgDb cfgdb,String tableName);
}
